iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0

前言

其實很久以前就聽過CQRS的名詞,一直以來只會CRUD的我,不了解如何實作,剛好看到最近的鐵人賽,想說可以透過這個機會,逼自己學習這個概念,預計接下來30天會參考rust這篇cqrs的小專案,去了解CQRS的概念,順便看能不能自己以rust的方式實作一版出來。

https://github.com/serverlesstechnology/cqrs

CQRS是什麼

是個聽起來很容易,做起來很困難的東西。Command Query Responsibility Segregation,不就是把查詢和修改分開來而已嗎:

cqrs diagram

如果那麼簡單,就不會只聞樓梯響 不見人下來;日常只見CRUD,難遇CQRS了。就像一句忘了在哪曾經看過的經典語錄,大約是這樣說的:「write code is simple, write simple code is hard」,表面上把「查詢」和「命令」進行職責分離,但是卻更難寫了。

ES 是什麼

Event Sourcing或稱事件溯源,就是可以把事件作為追溯的源頭,讓我們專注在事件而不是資料結構上,為什麼要這樣呢:

Event Sourcing diagram

忘了曾在哪看過還聽過,說程式碼只是我們軟體開發人員了解領域知識的副產品而已,約莫是同樣的概念。在ES裡,所有的資料都只是事件的副作用而已,也就是說所有的事件才是造就物件本身現在的樣貌,因此我們的關注點應該是要保有所有事件的軌跡。

太抽象嗎,去翻一下存摺,年輕一代的人可能沒看過實體存摺,拉開網銀的紀錄也是一樣的。銀行不會直接告訴你餘額,而是可以讓你知道今天的餘額是怎麼來的,每一次「存款」「提款」「轉帳」「匯款」等等都是事件,每一筆事件都被忠實紀錄下來,所以餘額只要重滾(replay)一次所有的事件,就可以得出,甚至還可以回溯去推得去年12/31當天的餘額是多少。

參考資料

  • 微軟架構文件-CQRS:https://learn.microsoft.com/zh-tw/azure/architecture/patterns/cqrs
  • 微架構文件-ES:https://learn.microsoft.com/zh-tw/azure/architecture/patterns/event-sourcing

下一篇
D2 Event Driven Design
系列文
當rust 遇上 cqrs & es30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言